home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 September / PCWorld_2006-09_cd.bin / v cisle / hexer / mpth_17.exe / {app} / scripts / Structure Viewer / zip.mps < prev   
Text File  |  2006-03-19  |  8KB  |  249 lines

  1. option title, "Zip archive (.zip) structure"
  2. =
  3. =
  4. =    Tiny Hexer script for .zip archives view in
  5. =    mirkes.de's tiny hex editor
  6. =
  7. =    (C) markus stephany, tinyhexer[at]mirkes[dot]de
  8. =
  9. INCLUDE 'def.mps'
  10.  
  11. option GlobalVars, 1
  12. option ReadTags, 1
  13. option target, structureviewer
  14.  
  15. = open active editor and goto current position/0
  16. var editor file
  17. editor = fileopen('::current')
  18. if ((param_count > 0) and (dword(params(0))==1))
  19.   fileseek editor, 0
  20. else
  21.   fileseek editor, filegetprop(editor, 'selstart')
  22. endif
  23. var start dword
  24. start = filegetprop(editor, 'position')
  25.  
  26. = open browser window
  27. var browser file
  28. browser = fileopen('::browser', 'c')
  29.  
  30. filesetprop browser, 'accepttags', 1
  31. filewrite browser "<font color=",'"',"blue",'"',"><b><u>Zip archive file structure:</u></b></font>\n\n"
  32. filesetprop browser, 'accepttags', 0
  33.  
  34. filewrite browser "File: '",filegetprop(editor, 'filename'),"'\nPosition: ",start,"\n\n"
  35.  
  36.  
  37. var _word word _dword dword _text text _pos dword _word1 word _dword1 dword _word2 word _word3 word
  38.  
  39.  
  40. repeat
  41.  
  42.   = read the zip structure signature
  43.   _pos = filepos(editor)
  44.   fileread editor _dword
  45.  
  46.   if _dword == 0x04034b50
  47.     filewrite browser "Local file header at ",_pos,":\n\n"
  48.     call HEADERSIG
  49.     fileread editor _word 
  50.     filewrite browser " Word\tVersionNeed\t",_word,"\n"
  51.     fileread editor _word 
  52.     filewrite browser " Word\tFlag\t\t",_word,"\n"
  53.     fileread editor _word 
  54.     filewrite browser " Word\tComprMethod\t",_word,"\n"
  55.     fileread editor _word 
  56.     filewrite browser " Word\tModifTime\t",_word,"\n"
  57.     fileread editor _word 
  58.     filewrite browser " Word\tModifDate\t",_word,"\n"
  59.     fileread editor _dword 
  60.     filewrite browser " DWORD\tCRC32\t\t",_dword,"\n"
  61.     fileread editor _dword1 
  62.     filewrite browser " DWORD\tComprSize\t",_dword1,"\t(": filewrite browser DEC(_dword1): filewrite browser " bytes)\n"
  63.     fileread editor _dword 
  64.     filewrite browser " DWORD\tUncomprSize\t",_dword,"\t(":filewrite browser DEC(_dword):filewrite browser " bytes)\n"
  65.     fileread editor _word 
  66.     filewrite browser " Word\tFileNameLen\t",_word,"\n"
  67.     fileread editor _word1 
  68.     filewrite browser " Word\tExtraLen\t",_word1,"\n\n"
  69.     if _word > 0
  70.       tagvar _word, filepos(editor), _word
  71.       call TEXTOUT, 'filename', _word
  72.       filewrite browser "\n"
  73.     endif
  74.     if _word1 > 0
  75.       tagvar _word1, filepos(editor), _word1
  76.       call TEXTOUT, 'extra data', _word1
  77.       filewrite browser "\n"
  78.     endif
  79.     if _dword1 > 0
  80.       tagvar _dword1, filepos(editor), _dword1
  81.       call NOTEXTOUT, 'compressed data', _dword1
  82.       filewrite browser "\n"
  83.     endif
  84.     filewrite browser "\n\n"
  85.   else
  86.     if _dword == 0x02014b50
  87.       filewrite browser "Central file header at ",_pos,":\n\n"
  88.       call HEADERSIG
  89.       fileread editor _word 
  90.       filewrite browser " Word\tVersionBy\t",_word,"\n"
  91.       fileread editor _word 
  92.       filewrite browser " Word\tVersionNeed\t",_word,"\n"
  93.       fileread editor _word 
  94.       filewrite browser " Word\tFlag\t\t",_word,"\n"
  95.       fileread editor _word 
  96.       filewrite browser " Word\tComprMethod\t",_word,"\n"
  97.       fileread editor _word 
  98.       filewrite browser " Word\tModifTime\t",_word,"\n"
  99.       fileread editor _word 
  100.       filewrite browser " Word\tModifDate\t",_word,"\n"
  101.       fileread editor _dword 
  102.       filewrite browser " DWORD\tCRC32\t\t",_dword,"\n"
  103.       fileread editor _dword1 
  104.       filewrite browser " DWORD\tComprSize\t",_dword1,"\t(":filewrite browser DEC(_dword1):filewrite browser " bytes)\n"
  105.       fileread editor _dword 
  106.       filewrite browser " DWORD\tUncomprSize\t",_dword,"\t(":filewrite browser DEC(_dword):filewrite browser " bytes)\n"
  107.       fileread editor _word 
  108.       filewrite browser " Word\tFileNameLen\t",_word,"\n"
  109.       fileread editor _word1 
  110.       filewrite browser " Word\tExtraLen\t",_word1,"\n"
  111.       fileread editor _word2
  112.       filewrite browser " Word\tFileComLen\t",_word2,"\n"
  113.       fileread editor _word3 
  114.       filewrite browser " Word\tDiskStart\t",_word3,"\n"
  115.       fileread editor _word3 
  116.       filewrite browser " Word\tIntFileAttr\t",_word3,"\n"
  117.       fileread editor _dword 
  118.       filewrite browser " DWORD\tExtFileAttr\t",_dword,"\n"
  119.       fileread editor _dword
  120.       _text = "RelOfLoc"
  121.       tagvar _text, _dword, 0
  122.       filewrite browser " DWORD\t",_text,"\t",_dword,"\n\n"
  123.       if _word > 0
  124.         tagvar _word, filepos(editor), _word
  125.         call TEXTOUT, 'filename', _word
  126.         filewrite browser "\n"
  127.       endif
  128.       if _word1 > 0
  129.         tagvar _word1, filepos(editor), _word1
  130.         call TEXTOUT, 'extra data', _word1
  131.         filewrite browser "\n"
  132.       endif
  133.       if _word2 > 0
  134.         tagvar _word2, filepos(editor), _word2
  135.         call TEXTOUT, 'file comment', _word2
  136.         filewrite browser "\n"
  137.       endif
  138.       filewrite browser "\n\n"
  139.     else 
  140.       if _dword == 0x06054b50
  141.  
  142.         filewrite browser "End Of Central file header at ",_pos,":\n\n"
  143.         call HEADERSIG
  144.         fileread editor _word 
  145.         filewrite browser " Word\tThisDiskNo\t",_word,"\n"
  146.         fileread editor _word 
  147.         filewrite browser " Word\tCDiskNo\t\t",_word,"\n"
  148.  
  149.         fileread editor _word
  150.         filewrite browser " Word\tCEntries\t",_word,"\t\t(":filewrite browser DEC(_word):filewrite browser " entries)\n"
  151.         fileread editor _word
  152.         filewrite browser " Word\tEntries\t\t",_word,"\t\t(":filewrite browser DEC(_word):filewrite browser " entries)\n"
  153.  
  154.         fileread editor _dword
  155.         filewrite browser " DWORD\tCSize\t\t",_dword,"\n"
  156.         fileread editor _dword
  157.         _text = "COfs"
  158.         tagvar _text, _dword, 0
  159.         filewrite browser " DWORD\t",_text,"\t\t",_dword,"\n"
  160.  
  161.         fileread editor _word
  162.         filewrite browser " Word\tCommentLen\t",_word,"\n\n"
  163.         if  _word > 0
  164.           filewrite browser "\n "
  165.           tagvar _word, filepos(editor), _word
  166.           call TEXTOUT, 'zip comment', _word
  167.           filewrite browser "\n "
  168.         endif
  169.         goto end
  170.  
  171.       else
  172.         error 'Unknown zip structure signature: ', Text(_dword)
  173.       endif
  174.     endif
  175.   endif
  176.  
  177. until 0
  178.  
  179. @@end
  180. fileclose editor
  181. fileclose browser
  182. end
  183.  
  184. @@STRIPTEXT
  185. = convert unprintable chars and trim to max 127 chars
  186. var ws text o text du none i byte c char b3 byte
  187. b3 = 0
  188. copytags du ws 
  189. if textlen(ws) > 127 
  190.   b3 = 1
  191.   ws = textcopy(ws,1,127)
  192. endif
  193. i = 1
  194. o = ''
  195. while i <= textlen(ws)
  196.   c = char(textcopy(ws,i,1))
  197.   if (c < ' ') or (c == "'")
  198.     o = o+'.'
  199.   else
  200.     o = o+c
  201.   endif
  202.   inc i 1
  203. endwhile
  204. ws = "\0x27"+o+"\0x27"
  205. if b3: ws = ws+'...':endif
  206. copytags ws du
  207. return
  208.  
  209. @@DECOUT
  210. number_radix = 10
  211. number_prefix = ''
  212. var _r1 varref
  213. pop _r1
  214. filewrite browser deref(_r1)
  215. number_radix = 16
  216. number_prefix = '0x'
  217. return
  218.  
  219. @@TEXTOUT:= output a string, convert white spaces, max 127 chars
  220. var t text d dword
  221. pop d
  222. pop t
  223. call DECOUT @d
  224. filewrite browser " byte(s) of ",t,"\t"
  225. fileread editor ws d
  226. call STRIPTEXT
  227. filewrite browser ws
  228. return
  229.  
  230. @@NOTEXTOUT:= output amount of data
  231. pop d
  232. pop t
  233. call DECOUT @d
  234. filewrite browser " byte(s) of ",t,"\t"
  235. fileseek editor d, FILE_CURRENT
  236. return
  237.  
  238. @@HEADERSIG
  239. var t1 text b1 byte b2 byte 
  240. fileseek editor _pos
  241. fileread editor t1 2
  242. fileread editor b1
  243. fileread editor b2
  244. filewrite browser " DWORD\tHeaderSig\t\0x27",t1,"\0x27 ",b1," ",b2,"\t(",_dword,")\n"
  245. return
  246.  
  247.  
  248.  
  249.